package com.myKng.shareservice.service;

import com.myKng.shareservice.dto.ShareLinkRequest;
import com.myKng.shareservice.dto.ShareLinkResponse;
import com.myKng.shareservice.model.ShareLink;

import java.util.List;

/**
 * 分享服务接口
 */
public interface ShareService {

    /**
     * 创建分享链接
     *
     * @param request   分享链接请求
     * @param creatorId 创建者ID
     * @return 分享链接响应
     */
    ShareLinkResponse createShareLink(ShareLinkRequest request, Long creatorId);

    /**
     * 根据分享码获取分享链接
     *
     * @param shareCode 分享码
     * @return 分享链接响应
     */
    ShareLinkResponse getShareLinkByCode(String shareCode);

    /**
     * 验证分享链接访问权限
     *
     * @param shareCode 分享码
     * @param password  访问密码（如果需要）
     * @param userId    访问用户ID（如果需要）
     * @return 是否有权限访问
     */
    boolean verifyShareLinkAccess(String shareCode, String password, Long userId);

    /**
     * 记录分享链接访问
     *
     * @param shareCode 分享码
     * @return 更新后的分享链接
     */
    ShareLink recordShareLinkAccess(String shareCode);

    /**
     * 获取用户创建的所有分享链接
     *
     * @param creatorId 创建者ID
     * @return 分享链接响应列表
     */
    List<ShareLinkResponse> getUserShareLinks(Long creatorId);

    /**
     * 禁用分享链接
     *
     * @param shareCode 分享码
     * @param creatorId 创建者ID
     * @return 是否成功禁用
     */
    boolean disableShareLink(String shareCode, Long creatorId);

    /**
     * 更新分享链接
     *
     * @param shareCode 分享码
     * @param request   分享链接请求
     * @param creatorId 创建者ID
     * @return 更新后的分享链接响应
     */
    ShareLinkResponse updateShareLink(String shareCode, ShareLinkRequest request, Long creatorId);

    /**
     * 清理过期和无效的分享链接
     */
    void cleanupExpiredShareLinks();

    /**
     * 获取分享URL
     *
     * @param shareCode 分享码
     * @return 完整的分享URL
     */
    String getShareUrl(String shareCode);
}